package in.rob.client.fragment.settings; import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnMultiChoiceClickListener; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import in.lib.builder.DialogBuilder; import in.lib.manager.SettingsManager; import in.lib.utils.Views; import in.lib.utils.Views.Injectable; import in.lib.utils.Views.OnClick; import in.lib.view.LinkTouchMovementMethod; import in.lib.view.SettingContainerView; import in.rob.client.R; import in.rob.client.fragment.base.BaseFragment; @Injectable public class AppearanceSettingsFragment extends BaseFragment { public static interface OnMultiChoiceDialogDismissed { public void onDialogDismissed(int finalBit); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.appearance_settings_view, container, false); Views.inject(this, view); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ((SettingContainerView)getView().findViewById(R.id.web_readability_mode)).getCheckableView().setChecked(SettingsManager.getInstance().isWebReadabilityModeEnabled()); ((SettingContainerView)getView().findViewById(R.id.non_following)).getCheckableView().setChecked(SettingsManager.getInstance().isNonFollowingMentionEnabled()); } private void createMultiChoiceDialog(int valuesRes, int optionsRes, int settingBit, final OnMultiChoiceDialogDismissed listener) { final int[] options = getResources().getIntArray(valuesRes); final boolean[] selectedItems = new boolean[options.length]; for (int index = 0; index < selectedItems.length; index++) { selectedItems[index] = (settingBit & options[index]) == options[index]; } Builder builder = DialogBuilder.create(getContext()); builder.setTitle(R.string.please_select); builder.setMultiChoiceItems(optionsRes, selectedItems, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { selectedItems[which] = isChecked; } }); builder.setPositiveButton(R.string.done, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { int finalBit = 0; for (int index = 0; index < selectedItems.length; index++) { if (selectedItems[index]) { finalBit |= options[index]; } } listener.onDialogDismissed(finalBit); } }); builder.setNegativeButton(R.string.cancel, null); builder.show(); } @OnClick public void onNonFollowingClick(SettingContainerView view) { SettingsManager.getInstance().setNonFollowingMentionEnabled(view.getCheckableView().isChecked()); } @OnClick public void onSingleClickLinksClick(SettingContainerView view) { createMultiChoiceDialog(R.array.single_click_values, R.array.single_click_options, SettingsManager.getInstance().getSingleClickBit(), new OnMultiChoiceDialogDismissed() { @Override public void onDialogDismissed(int finalBit) { SettingsManager.getInstance().setSingleClickBit(finalBit); LinkTouchMovementMethod.getInstance().recreate(); } }); } @OnClick public void onShowElementsClick(SettingContainerView view) { createMultiChoiceDialog(R.array.show_hide_element_values, R.array.show_hide_element_options, SettingsManager.getInstance().getShowHideBit(), new OnMultiChoiceDialogDismissed() { @Override public void onDialogDismissed(int finalBit) { SettingsManager.getInstance().setShowHideBit(finalBit); } }); } @OnClick public void onInAppViewerClick(SettingContainerView view) { createMultiChoiceDialog(R.array.in_app_viewer_values, R.array.in_app_viewer_options, SettingsManager.getInstance().getInAppViewerBit(), new OnMultiChoiceDialogDismissed() { @Override public void onDialogDismissed(int finalBit) { SettingsManager.getInstance().setInAppViewerBit(finalBit); } }); } @OnClick public void onWebReadabilityModeClick(SettingContainerView view) { SettingsManager.getInstance().setWebReadabilityModeEnabled(view.getCheckableView().isChecked()); } @OnClick public void onPostEmphasisClick(SettingContainerView view) { createMultiChoiceDialog(R.array.emphasis_values, R.array.emphasis_options, SettingsManager.getInstance().getEmphasisBit(), new OnMultiChoiceDialogDismissed() { @Override public void onDialogDismissed(int finalBit) { SettingsManager.getInstance().setEmphasisBit(finalBit); } }); } @Override public void onStop() { super.onStop(); SettingsManager.getInstance().save(); } }